{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11";

    home-manager = {
      url = "github:nix-community/home-manager/release-23.11";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nixos-wsl = {
			url = "github:nix-community/NixOS-WSL";
			inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, home-manager, nixos-wsl, ... } @ inputs:
    let
      inherit (self) outputs;
      lib = nixpkgs.lib // home-manager.lib;
      system = "x86_64-linux";
      pkgs = nixpkgs.legacyPackages.${system};
    in
    {
      inherit lib;

      nixosConfigurations = {
        laptop = lib.nixosSystem {
          specialArgs = { inherit inputs outputs; };
          modules = [ ./hosts/laptop ];
        };
        wsl = lib.nixosSystem {
          specialArgs = { inherit inputs outputs; };
          modules = [
						nixos-wsl.nixosModules.wsl
						./hosts/wsl
					];
        };
      };

      homeConfigurations = {
        server = lib.homeManagerConfiguration {
          inherit pkgs;
          extraSpecialArgs = { inherit inputs outputs; };
        	modules = [ ./profiles/server ];
        };
        hyprland = lib.homeManagerConfiguration {
          inherit pkgs;
          extraSpecialArgs = { inherit inputs outputs; };
        	modules = [ ./profiles/hyprland ];
        };
      };

      templates = rec {
        rust = {
          path = ./templates/rust;
          description = "Rust template";
        };
        java = {
          path = ./templates/java;
          description = "Java template";
        };
      };
    };
}